/*********************************************************
 * copyright xinbohit.com 版权所有 
 * 开发人员：IvanYu
 * 创建时间：2014/8/17 19:34:45
 * 描述说明：
 * 
 * 更改历史：
 * 
 * *******************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using LEARNREN.COM.BLL;

namespace LEARNREN.COM.UI.LabelProviders
{
    static class LabelProviderHelper
    {
        /// <summary>
        /// 获取标签前缀
        /// </summary>
        /// <param name="labelStr">标签文本</param>
        /// <returns></returns>
        public static string GetLowerPrefix(string labelStr)
        {
            // 如果不符合标签格式，就返回原文
            if (!Regex.IsMatch(labelStr, LabelPattern.SIMPLEPATTERN))
            {
                throw new ArgumentException("标签格式不合法，未能获取标签前缀。");
            }

            return labelStr.TrimStart('{').Split(':')[0].ToLower();
        }

        /// <summary>
        /// 获取标签的参数集合,都是小写形式
        /// </summary>
        /// <param name="labelStr">标签文本</param>
        /// <returns></returns>
        public static string[] GetProperties(string labelStr)
        {
            // 如果不符合标签格式，就返回空
            if (!Regex.IsMatch(labelStr, LabelPattern.SIMPLEPATTERN))
            {
                throw new ArgumentException("标签格式不合法，未能获取相关参数。");
            }
            string last = labelStr.Split(':')[1];
            return last.Substring(0, last.IndexOf('}')).TrimEnd('/').Split(',');
        }

        /// <summary>
        /// 获取封闭标签（形如：{lr_ctc:1}……{/lr_ctc}）内部的内容。独立标签返回空字符串。
        /// </summary>
        /// <param name="labelStr">要处理的标签字符串</param>
        /// <returns></returns>
        public static string GetInnerHtml(string labelStr)
        {
            string pattern = LabelPattern.CLOSEDPATTERN;
            if (Regex.IsMatch(labelStr, pattern))
            {
                int findex = labelStr.IndexOf("}");
                int lindex = labelStr.LastIndexOf("{");
                return labelStr.Substring(findex + 1, lindex - 1 - findex);
            }
            else
            {
                return string.Empty;
            }
        }

        /// <summary>
        /// 获取列表类型标签的Header模板
        /// </summary>
        /// <param name="labelStr">标签文本</param>
        /// <returns></returns>
        public static string GetListLabelHeader(string labelStr)
        {
            string reg = @"(?<=\<header\>)[\w\W]*?(?=\</header\>)";
            return Regex.Match(labelStr, reg, RegexOptions.Multiline).Value;
        }

        /// <summary>
        /// 获取列表类型标签的Item模板
        /// </summary>
        /// <param name="labelStr">标签文本</param>
        /// <returns></returns>
        public static string GetListLabelItem(string labelStr)
        {
            string reg = @"(?<=\<item\>)[\w\W]*?(?=\</item\>)";
            return Regex.Match(labelStr, reg, RegexOptions.Multiline).Value;
        }

        /// <summary>
        /// 获取列表类型标签的Header模板
        /// </summary>
        /// <param name="labelStr">标签文本</param>
        /// <returns></returns>
        public static string GetListLabelFooter(string labelStr)
        {
            string reg = @"(?<=\<footer\>)[\w\W]*?(?=\</footer\>)";
            return Regex.Match(labelStr, reg, RegexOptions.Multiline).Value;
        }

        /// <summary>
        /// 获取列表类型标签的Header模板
        /// </summary>
        /// <param name="labelStr">标签文本</param>
        /// <returns></returns>
        public static string GetListLabelEmpty(string labelStr)
        {
            string reg = @"(?<=\<empty\>)[\w\W]*?(?=\</empty\>)";
            return Regex.Match(labelStr, reg, RegexOptions.Multiline).Value;
        }
    }
}
